home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / site-packages / impacket / dcerpc / printer.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2006-06-30  |  15KB  |  276 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. from impacket.structure import Structure
  5.  
  6. def zeroize(s):
  7.     return '\x00'.join(str(s)) + '\x00'
  8.  
  9.  
  10. class SpoolSS_DevModeContainer(Structure):
  11.     alignment = 4
  12.     structure = (('cbBuf', '<L-DevMode'), ('pDevMode', '<L&DevMode'), ('DevMode', ':'))
  13.  
  14.  
  15. class SpoolSS_OpenPrinter(Structure):
  16.     alignment = 4
  17.     opnum = 1
  18.     structure = (('pPrinterName', '<L&PrinterName'), ('PrinterName', 'w'), ('pDevMode', '<L&DevMode'), ('DevMode', ':', SpoolSS_DevModeContainer), ('AccessRequired', '<L'), ('DataType', 'w'))
  19.  
  20.  
  21. class SpoolSS_PrinterInfo1(Structure):
  22.     alignment = 4
  23.     structure = (('level', '<L=1'), ('_level', '<L=1'), ('pPrinterInfo1', '<L=0x08081200'), ('flags', '<L'), ('pDescription', '<L&Description'), ('pName', '<L&Name'), ('pComment', '<L&Comment'), ('Description', 'w'), ('Name', 'w'), ('Comment', 'w'))
  24.  
  25.  
  26. class SpoolSS_PrinterInfo2(Structure):
  27.     alignment = 4
  28.     structure = (('level', '<L=2'), ('_level', '<L=2'), ('pPrinterInfo2', '<L=0x08081200'), ('pServerName', '<L&ServerName'), ('pPrinterName', '<L&PrinterName'), ('pShareName', '<L&ShareName'), ('pPortName', '<L&PortName'), ('pDriverName', '<L&DriverName'), ('pComment', '<L&Comment'), ('pLocation', '<L&Location'), ('pDevMode', '<L&DevMode'), ('pSepFile', '<L&SepFile'), ('pPrintProcessor', '<L&PrintProcessor'), ('pDatatype', '<L&Datatype'), ('pParameters', '<L&Parameters'), ('pSecurityDescriptor', '<L&SecurityDescriptor'), ('Attributes', '<L=0'), ('Priority', '<L=0'), ('DefaultPriority', '<L=0'), ('StartTime', '<L=0'), ('UntilTime', '<L=0'), ('Status', '<L=0'), ('cjobs', '<L=0'), ('AveragePPM', '<L=0'), ('ServerName', 'w'), ('PrinterName', 'w'), ('ShareName', 'w'), ('PortName', 'w'), ('DriverName', 'w'), ('Comment', 'w'), ('Location', 'w'), ('DevMode', ':'), ('SepFile', 'w'), ('PrintProcessor', 'w'), ('Datatype', 'w'), ('Parameters', 'w'), ('SecurityDescriptor', ':'))
  29.  
  30.  
  31. class SpoolSS_AddPrinter(Structure):
  32.     opnum = 5
  33.     alignment = 4
  34.     structure = (('pName', '<L&Name'), ('Name', 'w'), ('info', ':', SpoolSS_PrinterInfo2), ('blob', ':'))
  35.  
  36.  
  37. class SpoolSS_DeletePrinter(Structure):
  38.     opnum = 6
  39.     alignment = 4
  40.     structure = (('handle', '<L'),)
  41.  
  42.  
  43. class SpoolSS_AddPrinterEx(Structure):
  44.     opnum = 70
  45.     alignment = 4
  46.     structure = (('pName', '<L=0x12345678'), ('Name', 'w'), ('info', ':', SpoolSS_PrinterInfo2), ('blob', ':'))
  47.  
  48.  
  49. class SpoolSS_EnumPrinters(Structure):
  50.     opnum = 0
  51.     alignment = 4
  52.     structure = (('flags', '<L'), ('pName', '<L&Name'), ('Name', 'w'), ('level', '<L'), ('pPrinterEnum', '<L&PrinterEnum'), ('_cbBuf', '<L-PrinterEnum'), ('PrinterEnum', ':'), ('cbBuf', '<L-PrinterEnum'))
  53.  
  54.  
  55. class SpoolSS_EnumPrinters_answer(Structure):
  56.     alignment = 4
  57.     structure = (('pPrinterEnum', '<L&PrinterEnum'), ('cbPrinterEnum', '<L-PrinterEnum'), ('PrinterEnum', ':'), ('cbNeeded', '<L'), ('cReturned', '<L'))
  58.  
  59.  
  60. class SpoolSS_EnumPorts(Structure):
  61.     opnum = 35
  62.     alignment = 4
  63.     structure = (('pName', '<L&Name'), ('Name', 'w'), ('level', '<L'), ('pPort', '<L&Port'), ('_cbBuf', '<L-Port'), ('Port', ':'), ('cbBuf', '<L-Port'))
  64.  
  65.  
  66. class SpoolSS_EnumPorts_answer(Structure):
  67.     alignment = 4
  68.     structure = (('pPort', '<L&Port'), ('cbPort', '<L-Port'), ('Port', ':'), ('cbNeeded', '<L'), ('cReturned', '<L'))
  69.  
  70.  
  71. class SpoolSS_AddPort(Structure):
  72.     opnum = 37
  73.     alignment = 4
  74.     structure = (('pName', '<L&Name'), ('Name', 'w'), ('hWnd', '<L'), ('pMonitorName', '<L&MonitorName'), ('MonitorName', 'w'))
  75.  
  76.  
  77. class SpoolSS_PortInfo1(Structure):
  78.     alignment = 4
  79.     structure = (('level', '<L=1'), ('_level', '<L=1'), ('pPortInfo1', '<L=0x08081200'), ('pName', '<L&Name'), ('Name', 'w'))
  80.  
  81.  
  82. class SpoolSS_AddPortEx(Structure):
  83.     opnum = 61
  84.     alignment = 4
  85.     structure = (('pName', '<L&Name'), ('Name', 'w'), ('Port', ':', SpoolSS_PortInfo1), ('cbMonitorData', '<L-MonitorData'), ('MonitorData', ':'), ('MonitorName', 'w'))
  86.  
  87.  
  88. class SpoolSS_AddPrintProcessor(Structure):
  89.     opnum = 14
  90.     alignment = 4
  91.     structure = (('pName', '<L&Name'), ('Name', 'w'), ('pEnvironment', '<L&Environment'), ('pPathName', '<L&PathName'), ('pPrintProcessorName', '<L&PrintProcessorName'), ('Environment', 'w'), ('PathName', 'w'), ('PrintProcessorName', 'w'))
  92.  
  93.  
  94. class SpoolSS_EnumMonitors(Structure):
  95.     opnum = 36
  96.     alignment = 4
  97.     structure = (('pName', '<L&Name'), ('Name', 'w'), ('level', '<L'), ('pMonitor', '<L&Monitor'), ('_cbBuf', '<L-Monitor'), ('Monitor', ':'), ('cbBuf', '<L-Monitor'))
  98.  
  99.  
  100. class SpoolSS_AddMonitor(Structure):
  101.     opnum = 46
  102.     alignment = 4
  103.     structure = (('pHostName', '<L&HostName'), ('HostName', 'w'), ('level', '<L'), ('level', '<L'), ('pLevel', '<L&level'), ('pName', '<L&Name'), ('pEnvironment', '<L&Environment'), ('pDLLName', '<L&DLLName'), ('Name', 'w'), ('Environment', 'w'), ('DLLName', 'w'))
  104.  
  105.  
  106. class SpoolSS_EnumMonitors_answer(Structure):
  107.     alignment = 4
  108.     structure = (('pMonitor', '<L&Monitor'), ('cbMonitor', '<L-Monitor'), ('Monitor', ':'), ('cbNeeded', '<L'), ('cReturned', '<L'))
  109.  
  110. PRINTER_ENUM_DEFAULT = 1
  111. PRINTER_ENUM_LOCAL = 2
  112. PRINTER_ENUM_CONNECTIONS = 4
  113. PRINTER_ENUM_FAVORITE = 4
  114. PRINTER_ENUM_NAME = 8
  115. PRINTER_ENUM_REMOTE = 16
  116. PRINTER_ENUM_SHARED = 32
  117. PRINTER_ENUM_NETWORK = 64
  118.  
  119. class PrintSpooler:
  120.     
  121.     def __init__(self, dce):
  122.         self.dce = dce
  123.  
  124.     
  125.     def doRequest(self, request, noAnswer = 0, checkReturn = 1):
  126.         self.dce.call(request.opnum, request)
  127.         if noAnswer:
  128.             return None
  129.         else:
  130.             answer = self.dce.recv()
  131.             if checkReturn and answer[-4:] != '\x00\x00\x00\x00':
  132.                 raise Exception, 'DCE-RPC call returned an error.'
  133.             
  134.             return answer
  135.  
  136.     
  137.     def enumPrinters(self, name, flags = 0, level = 1):
  138.         enumPrinters = SpoolSS_EnumPrinters()
  139.         enumPrinters['level'] = level
  140.         enumPrinters['flags'] = flags
  141.         enumPrinters['Name'] = name
  142.         enumPrinters['PrinterEnum'] = ''
  143.         ans = SpoolSS_EnumPrinters_answer(self.doRequest(enumPrinters, checkReturn = 0))
  144.         self.logDebug('enumPrinters() needing %d bytes' % ans['cbNeeded'])
  145.         if ans['cbNeeded'] > 4096:
  146.             raise Exception, 'Buffer is too big.'
  147.         
  148.         enumPrinters = SpoolSS_EnumPrinters()
  149.         enumPrinters['level'] = level
  150.         enumPrinters['flags'] = flags
  151.         enumPrinters['Name'] = name
  152.         enumPrinters['PrinterEnum'] = '\x00' * ans['cbNeeded']
  153.         ans = SpoolSS_EnumPrinters_answer(self.doRequest(enumPrinters, checkReturn = 0))
  154.  
  155.     
  156.     def openPrinter(self, printerName, dataType, devMode, accessRequired):
  157.         openPrinter = SpoolSS_OpenPrinter()
  158.         if printerName:
  159.             openPrinter['PrinterName'] = zeroize(printerName + '\x00')
  160.         
  161.         if dataType:
  162.             openPrinter['DataType'] = zeroize(dataType + '\x00')
  163.         
  164.         if devMode:
  165.             devModeC = SpoolSS_DevModeContainer()
  166.             devModeC['cbBuf'] = 0
  167.             devModeC['pDevMode'] = 0
  168.             devModeC['DevMode'] = ''
  169.             openPrinter['DevMode'] = '\x00\x00\x00\x00'
  170.             openPrinter['pDevMode'] = 0
  171.         
  172.         openPrinter['AccessRequired'] = accessRequired
  173.         return self.doRequest(openPrinter, checkReturn = 0)
  174.  
  175.     
  176.     def enumPorts(self, level = 1, noAnswer = 0):
  177.         enumPorts = SpoolSS_EnumPorts()
  178.         enumPorts['level'] = level
  179.         enumPorts['Port'] = ''
  180.         if noAnswer:
  181.             self.doRequest(enumPorts, noAnswer = 1)
  182.         else:
  183.             ans = SpoolSS_EnumPorts_answer(self.doRequest(enumPorts, checkReturn = 0))
  184.             enumPorts = SpoolSS_EnumPorts()
  185.             enumPorts['level'] = level
  186.             enumPorts['Port'] = '\x00' * ans['cbNeeded']
  187.             ans = SpoolSS_EnumPorts_answer(self.doRequest(enumPorts, checkReturn = 0))
  188.  
  189.     
  190.     def enumMonitors(self, level = 1):
  191.         enumMonitors = SpoolSS_EnumMonitors()
  192.         enumMonitors['level'] = level
  193.         enumMonitors['Monitor'] = ''
  194.         ans = SpoolSS_EnumMonitors_answer(self.doRequest(enumMonitors, checkReturn = 0))
  195.         enumMonitors = SpoolSS_EnumMonitors()
  196.         enumMonitors['level'] = level
  197.         enumMonitors['Monitor'] = '\x00' * ans['cbNeeded']
  198.         ans = SpoolSS_EnumMonitors_answer(self.doRequest(enumMonitors, checkReturn = 0))
  199.  
  200.     
  201.     def addMonitor(self, name, monitorName, environment, dllName):
  202.         addMonitor = SpoolSS_AddMonitor()
  203.         addMonitor['level'] = 2
  204.         addMonitor['HostName'] = zeroize(name)
  205.         addMonitor['Name'] = zeroize(monitorName)
  206.         addMonitor['Environment'] = zeroize(environment)
  207.         addMonitor['DLLName'] = zeroize(dllName)
  208.         ans = self.doRequest(addMonitor, checkReturn = 0)
  209.         print '%r' % ans
  210.  
  211.     
  212.     def addPort(self):
  213.         addPort = SpoolSS_AddPort()
  214.         addPort['Name'] = zeroize('\\192.168.22.90\x00')
  215.         addPort['hWnd'] = 0
  216.         addPort['MonitorName'] = zeroize('LanMan Print Services Port\x00')
  217.         return self.doRequest(addPort)
  218.  
  219.     
  220.     def addPortEx(self):
  221.         port = SpoolSS_PortInfo1()
  222.         port['Name'] = zeroize('Port Name\x00')
  223.         addPortEx = SpoolSS_AddPortEx()
  224.         addPortEx['Name'] = zeroize('\\\\192.168.22.90\x00')
  225.         addPortEx['Port'] = port
  226.         addPortEx['cbMonitorData'] = 0
  227.         addPortEx['MonitorData'] = '\x00' * 4
  228.         addPortEx['MonitorName'] = zeroize('Monitor Name\x00')
  229.         return self.doRequest(addPortEx)
  230.  
  231.     
  232.     def addPrintProcessor(self):
  233.         addPrintProcessor = SpoolSS_AddPrintProcessor()
  234.         addPrintProcessor['Environment'] = zeroize('Windows NT x86\x00')
  235.         addPrintProcessor['PathName'] = zeroize('C:\\hola\\manola\x00')
  236.         addPrintProcessor['PrintProcessorName'] = zeroize('chaucha\x00')
  237.         return self.doRequest(addPrintProcessor)
  238.  
  239.     
  240.     def deletePrinter(self, handle):
  241.         deletePrinter = SpoolSS_DeletePrinter()
  242.         deletePrinter['handle'] = handle
  243.         self.doRequest(deletePrinter)
  244.  
  245.     
  246.     def addPrinter(self, serverName, name, level = 1, flags = 0, comment = None, description = None):
  247.         addPrinter = SpoolSS_AddPrinter()
  248.         if serverName is not None:
  249.             addPrinter['Name'] = serverName
  250.         
  251.         if level == 1:
  252.             addPrinter['info'] = SpoolSS_PrinterInfo1()
  253.             addPrinter['info']['Name'] = name
  254.             addPrinter['info']['Description'] = description
  255.             addPrinter['info']['flags'] = flags
  256.         elif level == 2:
  257.             addPrinter['info'] = SpoolSS_PrinterInfo2()
  258.             addPrinter['info']['PrinterName'] = name
  259.         else:
  260.             raise Exception, 'Unknown PRINTER_INFO level'
  261.         addPrinter['info']['Comment'] = comment
  262.         addPrinter['blob'] = '\x00\x00\x00\x00' * 4
  263.         return self.doRequest(addPrinter, checkReturn = 0)
  264.  
  265.     
  266.     def addPrinterEx(self, serverName, name, comment = None):
  267.         addPrinterEx = SpoolSS_AddPrinterEx()
  268.         addPrinterEx['Name'] = serverName
  269.         addPrinterEx['info'] = SpoolSS_PrinterInfo2()
  270.         addPrinterEx['info']['PrinterName'] = name
  271.         addPrinterEx['info']['Comment'] = comment
  272.         addPrinterEx['blob'] = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\xf8\xf30\x00\x1c\x00\x00\x00\xf0b\xc9\x00\xe0\xf10\x00\x93\x08\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\\\x00\\\x00E\x00R\x00A\x00T\x00O\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00A\x00d\x00m\x00i\x00n\x00i\x00s\x00t\x00r\x00a\x00t\x00o\x00r\x00\x00\x00'
  273.         return self.doRequest(addPrinterEx)
  274.  
  275.  
  276.